package com.tellus.util;

import java.util.ArrayList;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.tellus.seguridad.model.dao.GrupoDao;
import com.tellus.seguridad.model.vo.Grupo;
import com.tellus.campaign.model.dao.CampaignDao;
import com.tellus.campaign.model.vo.Campaign;

public class Recursive {
	
	private GrupoDao grupoDao;
	private CampaignDao campaignDao;
	private List<Grupo> grupos;
	private List<Campaign> campaigns;
	
	
	public Recursive(Grupo grupo){
		
		ServletContext servletContext = (ServletContext) FacesContext
				.getCurrentInstance().getExternalContext().getContext();

		WebApplicationContext webApplicationContext = WebApplicationContextUtils
				.getRequiredWebApplicationContext(servletContext);
		grupoDao = (GrupoDao) webApplicationContext.getBean("grupoDao");
		grupos = new ArrayList<Grupo>();
		grupos.add(grupo);
	}
	
	public Recursive(Campaign campaign){
		
		ServletContext servletContext = (ServletContext) FacesContext
				.getCurrentInstance().getExternalContext().getContext();

		WebApplicationContext webApplicationContext = WebApplicationContextUtils
				.getRequiredWebApplicationContext(servletContext);
		campaignDao = (CampaignDao) webApplicationContext.getBean("campaignDao");
		campaigns = new ArrayList<Campaign>();
		campaigns.add(campaign);
	}

	
	public List<Grupo> populateGrupo(Grupo grupo) {

		List<Grupo> gruposEncontrados = grupoDao.obtenerGruposPorPadre(grupo);
		for (int i = 0; i < gruposEncontrados.size(); i++) {
			Grupo grupoEncontrado = gruposEncontrados.get(i);
			grupos.add(grupoEncontrado);
			populateGrupo(grupoEncontrado);

		}
		
		return grupos;

	}
	
	public List<Campaign> populateCampaign(Campaign campaign) {

		List<Campaign> campaignsEncontradas = campaignDao.obtenerCampaignsPorPadre(campaign);
		for (int i = 0; i < campaignsEncontradas.size(); i++) {
			Campaign campaignEncontrada = campaignsEncontradas.get(i);
			campaigns.add(campaignEncontrada);
			populateCampaign(campaignEncontrada);

		}
		
		return campaigns;

	}
	

	public GrupoDao getGrupoDao() {
		return grupoDao;
	}

	public void setGrupoDao(GrupoDao grupoDao) {
		this.grupoDao = grupoDao;
	}

	public CampaignDao getCampaignDao() {
		return campaignDao;
	}

	public void setCampaignDao(CampaignDao campaignDao) {
		this.campaignDao = campaignDao;
	}
	
	

}
